package io.pisceshub.muchat.sdk.task;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Slf4j
public abstract class AbstractPullMessageTask {

    private int threadNum = 8;

    private ExecutorService executorService = Executors.newFixedThreadPool(threadNum);

    @PostConstruct
    public void init() {
        // 初始化定时器
        for (int i = 0; i < threadNum; i++) {
            executorService.execute(new Runnable() {

                @SneakyThrows
                @Override
                public void run() {
                    try {
                        pullMessage();
                    } catch (Exception e) {
                        log.error("任务调度异常", e);
                        Thread.sleep(200);
                    }
                    if (!executorService.isShutdown()) {
                        executorService.execute(this);
                    }
                }
            });
        }
    }

    @PreDestroy
    public void destroy() {
        log.info("{}线程任务关闭", this.getClass().getSimpleName());
        executorService.shutdown();
    }

    public abstract void pullMessage();
}
